Fixed flaky WebXR outputContext test Promise test wasn't actually returning a promise, so the actual test logic was frequently being skipped by the test runners. Bug: 951553 Change-Id: I3b036b5b2dbb4edc347d2a94fe507b25681db4cb Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1565248 Auto-Submit: Brandon Jones <bajones@chromium.org> Reviewed-by: Brian Sheedy <bsheedy@chromium.org> Commit-Queue: Brandon Jones <bajones@chromium.org> Cr-Commit-Position: refs/heads/master@{#651034} diff --git a/webxr/xrSession_transfer_outputContext.https.html b/webxr/xrSession_transfer_outputContext.https.html index 69c52d2..658cb32 100644 --- a/webxr/xrSession_transfer_outputContext.https.html +++ b/webxr/xrSession_transfer_outputContext.https.html
@@ -3,40 +3,53 @@ <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src="resources/webxr_util.js"></script> + <canvas></canvas> <script> xr_promise_test( "Ensure that XRPresentationContexts are properly transfered between session", (t) => { return XRTest.simulateDeviceConnection({ supportsImmersive:false }) .then( (controller) => { - Promise.all([ + return Promise.all([ navigator.xr.requestSession({ mode: 'inline'}), navigator.xr.requestSession({ mode: 'inline'}) ]).then((sessions) => { - assert_not_equals(sessions[0], null); - assert_not_equals(sessions[1], null); + t.step(() => { + assert_not_equals(sessions[0], null); + assert_not_equals(sessions[1], null); + }); + const webglCanvas = document.getElementsByTagName('canvas')[0]; + let gl = webglCanvas.getContext('webgl', {xrCompatible: true}); let outputContext = getOutputContext(); sessions[0].updateRenderState({ - baseLayer: new XRWebGLLayer(session, gl), + baseLayer: new XRWebGLLayer(sessions[0], gl), outputContext: outputContext }); - sessions[0].requestAnimationFrame((time, xrFrame) => { - sessions[1].updateRenderState({ - baseLayer: new XRWebGLLayer(session, gl), - outputContext: outputContext - }); + return new Promise((resolve, reject) => { + sessions[0].requestAnimationFrame((time, xrFrame) => { + sessions[1].updateRenderState({ + baseLayer: new XRWebGLLayer(sessions[1], gl), + outputContext: outputContext + }); - // outputContext reassignment should not happen until the next frame is processed. - assert_equals(sessions[0].renderState.outputContext, outputContext); - assert_equals(sessions[1].renderState.outputContext, null); + t.step(() => { + // outputContext reassignment should not happen until the next frame is processed. + assert_equals(sessions[0].renderState.outputContext, outputContext); + assert_equals(sessions[1].renderState.outputContext, null); + }); - sessions[1].requestAnimationFrame((time, xrFrame) => { - // Ensure the outputContext was properly reassigned from one context to the other. - assert_equals(sessions[0].renderState.outputContext, null); - assert_equals(sessions[1].renderState.outputContext, outputContext); + sessions[1].requestAnimationFrame((time, xrFrame) => { + t.step(() => { + // Ensure the outputContext was properly reassigned from one context to the other. + assert_equals(sessions[0].renderState.outputContext, null); + assert_equals(sessions[1].renderState.outputContext, outputContext); + }); + + resolve(); + }); }); }); });